HashSet源码实现

HashSet实现了Set接口,Set是一种无序不可重复的集合。HashSet内部通过HashMap来实现的
本篇我们介绍它的实现部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
//内部通过HashMap实现
private transient HashMap<E,Object> map;

//这个对象用来关联已经存在的对象的Value,已经存在的对象实际上为Key值
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();

public HashSet() {
map = new HashMap<>();
}

}

####添加元素

1
2
3
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

添加元素到HashSet的方法异常简单,只是调用map的put方法,这里可以看到e实际上为map的key,它作为HashMap的元素
而PRESENT对象是与其关联的对象,map的put返回null表示之前没有添加过该key-value对。而HashSet的add返回true表示
e未添加过。

####移除元素

1
2
3
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}

移除元素是通过map的remove方法来实现的。

坚持原创技术分享,您的支持将鼓励我继续创作!